一、配置 docker 环境
参考链接:Hadoop安装之一:使用Docker编译64位的Hadoop - 简书
1. 制作 CentOS 7 基础镜像(可选) Docker Hub上已经提供了CentOS7的官方镜像 ,但并未激活 Systemd(用来启动守护进程),制作一个启动 Systemd 的镜像。(这里编译Hadoop其实用不到systemd)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 FROM centos:7 MAINTAINER "you" <your@email.here> ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i ; done ); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local -fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; VOLUME [ "/sys/fs/cgroup" ] CMD ["/usr/sbin/init" ]
1 docker build -t centos7-systemd .
2. 安装 Oracle Java
参考链接使用yum卸载、安装jdk_不做小白的博客-CSDN博客
注意不要使用 openjdk,会导致编译 hive 时出现问题
启动刚刚生成的镜像
从官网下载 oracle java jdk-8u202-linux-x64.tar.gz
安装 Java,配置环境变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 mkdir /usr/local /java cp jdk-8u202-linux-x64.tar.gz /usr/local /java cd /usr/local /javatar -xzvf jdk-8u202-linux-x64.tar.gz vim /etc/profile ~ ~ export JAVA_HOME=/usr/local /java/jdk1.8.0_202export JRE_HOME=/usr/local /java/jdk1.8.0_202/jre export PATH=$PATH :/usr/local /java/jdk1.8.0_202/bin export CLASSPATH=./:/usr/local /java/jdk1.8.0_202/lib:/usr/local /java/jdk1.8.0_202/jre/lib~ ~ source /etc/profilejava -version
3. 制作编译镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ vi compile.sh #!/bin/bash version=${1:-2.7.3} cd /hadoop-$version -srcecho -e "\n\ncompile hadoop $version ..." mvn clean package -Pdist,native -DskipTests -Dtar if [[ $? -eq 0]]; then echo -e "\n\ncompile hadoop $version success!\n\n" else echo -e "\n\ncompile hadoop $version fail!\n\n" fi
Dockerfile(其中有不少安装包不是必要的)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 FROM centos7-systemd-java MAINTAINER "you" <your@email.here> RUN yum update -y && \ yum groupinstall -y "Development Tools" && \ yum install -y wget \ protobuf-devel \ protobuf-compiler \ maven \ cmake \ pkgconfig \ openssl-devel \ zlib-devel \ gcc \ automake \ autoconf \ make COPY compile.sh /root/compile.sh RUN chmod +x /root/compile.sh
1 sudo docker build -t centos7-hadoop-compiler .
二、编译源码
1 mvn clean package -Pdist -DskipTests
1 mvn clean package -Pdist,native -DskipTests -Dtar
也可以使用 docker image 中的脚本编译
1 2 $ export VERSION=2.7.3 $ sudo docker run -v $(pwd )/hadoop-$VERSION -src:/hadoop-$VERSION -src --privileged=true centos7-hadoop-complier /root/compile.sh $VERSION
要添加 privileged 参数!
[docker]privileged参数_追寻神迹-CSDN博客
使用该参数,container内的root拥有真正的root权限。 否则,container内的root只是外部的一个普通用户权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 docker pull shuofxz/hadoop-compiler:1.0 https://hadoop.apache.org/releases.html https://archive.apache.org/dist/hadoop/common/ mvn package -Pdist,native -DskipTests -Dtar $ export VERSION=2.7.3 $ sudo docker run -v $(pwd )/hadoop-$VERSION -src:/hadoop-$VERSION -src --privileged=true shuofxz/hadoop-compiler:1.0 /root/hadoop-compile.sh $VERSION https://github.com/apache/hive mvn clean package -Pdist -DskipTests $ export VERSION=2.3.0 $ sudo docker run -v $(pwd )/hive-rel-release-$VERSION :/hive-rel-release-$VERSION --privileged=true shuofxz/hadoop-compiler:1.0 /root/hive-compile.sh $VERSION
hadoop-2.7.0-src.tar.gz release-2.3.0.tar.gz
已包括各种库的 image,可以直接编译 hadoop(不好用)
GitHub - kiwenlau/compile-hadoop: Compile Hadoop in Docker containerhttps://github.com/kiwenlau/compile-hadoop